// GruppeFagForm.cpp : implementation file
//

#include "stdafx.h"
#include "EBASApp.h"
#include "GruppeFagForm.h"
#include "ValgFagDialog.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CGruppeFagForm

IMPLEMENT_DYNCREATE(CGruppeFagForm, CFormView)

CGruppeFagForm::CGruppeFagForm()
	: CFormView(CGruppeFagForm::IDD)
{
	//{{AFX_DATA_INIT(CGruppeFagForm)
	m_navn = _T("");
	m_sted = _T("");
	m_bemaerkning = _T("");
	m_startTid = 0;
	m_slutTid = 0;
	//}}AFX_DATA_INIT

	m_EnumGruppe = NULL;
	m_curGruppe = NULL;
	m_EnumEjerforhold = NULL;
}

CGruppeFagForm::~CGruppeFagForm()
{
	m_EnumGruppe = NULL;
	m_curGruppe = NULL;
	m_EnumEjerforhold = NULL;
}

void CGruppeFagForm::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CGruppeFagForm)
	DDX_Control(pDX, IDC_COMBO_OPRETGRUPPE_EJERFORHOLD, m_ejerforhold);
	DDX_Control(pDX, IDC_LIST_GRUPPEOVERSIGT_FAG, m_fag);
	DDX_Control(pDX, IDC_LIST_GRUPPEOVERSIGT_LISTE, m_grupper);
	DDX_Text(pDX, IDC_EDIT_OPRETGRUPPE_NAVN, m_navn);
	DDX_Text(pDX, IDC_EDIT_OPRETGRUPPE_STED, m_sted);
	DDX_Text(pDX, IDC_EDIT_OPRETGRUPPE_BEMAERKNING, m_bemaerkning);
	DDX_DateTimeCtrl(pDX, IDC_DATETIMEPICKER_OPRETGRP_STARTTID, m_startTid);
	DDX_DateTimeCtrl(pDX, IDC_DATETIMEPICKER_OPRETGRP_SLUTTID, m_slutTid);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CGruppeFagForm, CFormView)
	//{{AFX_MSG_MAP(CGruppeFagForm)
	ON_BN_CLICKED(IDC_BUTTON_GRPOVERSIGT_TILFOEJ_FAG, OnButtonGrpoversigtTilfoejFag)
	ON_LBN_DBLCLK(IDC_LIST_GRUPPEOVERSIGT_LISTE, OnDblclkListGruppeoversigtListe)
	ON_BN_CLICKED(IDC_BUTTON_GRPOVERSIGT_FJERN_FAG, OnButtonGrpoversigtFjernFag)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CGruppeFagForm diagnostics

#ifdef _DEBUG
void CGruppeFagForm::AssertValid() const
{
	CFormView::AssertValid();
}

void CGruppeFagForm::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CGruppeFagForm message handlers

void CGruppeFagForm::OnButtonGrpoversigtTilfoejFag() 
{
	UpdateData();

	try {
		CValgFagDialog * dialog = new CValgFagDialog;
		dialog->put_StartDato(m_startTid);
		dialog->put_SlutDato(m_slutTid);
		dialog->DoModal();	

		int antal = dialog->get_AntalValgte();
		CString * data = dialog->get_Valgte();

		CTime start, slut;
		start = dialog->get_StartDato();
		slut = dialog->get_SlutDato();
		CString strStart, strSlut;
		strStart = start.Format("%Y-%m-%d");
		strSlut = slut.Format("%Y-%m-%d");

		EBASDLLLib::IEnumFagPtr pEnumFag = NULL;
		pEnumFag.CreateInstance(__uuidof(EBASDLLLib::EnumFag));

		for (int i=0; i<antal; i++) {
			bstr_t navn = data[i];

			EBASDLLLib::IFagPtr pFag = NULL;
			pFag = pEnumFag->findFagNavn(navn);
			
			m_curGruppe->TilfoejFag(pFag, bstr_t(strStart), bstr_t(strSlut));
			m_fag.AddString(pFag->Navn);
		}
	} catch (...) {

	}

	UpdateData(FALSE);
}

void CGruppeFagForm::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();

	try {
		if (NULL == m_EnumGruppe)
			m_EnumGruppe.CreateInstance(__uuidof(EBASDLLLib::EnumGruppe));
		else
			m_EnumGruppe->Reset();

		IUnknown * pUnk = NULL; ULONG fetched = 0;
		m_EnumGruppe->Next(&pUnk, &fetched);
		while (NULL != pUnk) {
			EBASDLLLib::IGruppePtr pGruppe = NULL;
			pUnk->QueryInterface(__uuidof(EBASDLLLib::IGruppe), (void**)&pGruppe);
			pUnk = NULL;

			m_grupper.AddString(pGruppe->Navn);
			
			pGruppe = NULL;

			m_EnumGruppe->Next(&pUnk, &fetched);
		}

		bstr_t navn;
		pUnk = NULL; fetched = 0;		
		EBASDLLLib::IEnumEjerforholdPtr pEnumEjerforhold;
		pEnumEjerforhold.CreateInstance(__uuidof(EBASDLLLib::EnumEjerforhold));
		pEnumEjerforhold->Next(&pUnk, &fetched);
		while (NULL != pUnk) {
			EBASDLLLib::IEjerforholdPtr pEjerforhold = NULL;
			pUnk->QueryInterface(__uuidof(EBASDLLLib::IEjerforhold), (void**)&pEjerforhold);
			pUnk = NULL;

			EBASDLLLib::IAdressePtr pAdresse = NULL;
			pAdresse = pEjerforhold->Adresse;
			navn = pAdresse->Attention;
			m_ejerforhold.AddString(navn);

			pAdresse = NULL;
			pEjerforhold = NULL;

			pEnumEjerforhold->Next(&pUnk, &fetched);
		}
		m_ejerforhold.SetCurSel(-1);
	} catch (...) {

	}
	
	UpdateData(FALSE);
}

void CGruppeFagForm::OnDblclkListGruppeoversigtListe() 
{
	UpdateData();

	try {
		CButton * btm_add = (CButton *)GetDlgItem(IDC_BUTTON_GRPOVERSIGT_TILFOEJ_FAG);
		btm_add->EnableWindow();
		CButton * btm_remove = (CButton *)GetDlgItem(IDC_BUTTON_GRPOVERSIGT_FJERN_FAG);
		btm_remove->EnableWindow();

		CString navn, holder;
		int sel = m_grupper.GetCurSel();
		m_grupper.GetText(sel, navn);

		m_curGruppe = m_EnumGruppe->findGruppeNavn(bstr_t(navn));
		if (NULL == m_curGruppe)
			MessageBox("Gruppe ikke fundet", "Information");

		m_navn = (char*)m_curGruppe->Navn;
		m_sted = (char*)m_curGruppe->Sted;
		m_bemaerkning = (char*)m_curGruppe->Bemaerkning;
		holder = (char*)m_curGruppe->StartTid;
		m_startTid = StringToTime(holder);
		holder = (char*)m_curGruppe->SlutTid;
		m_slutTid = StringToTime(holder);

		if (NULL == m_EnumEjerforhold)
			m_EnumEjerforhold.CreateInstance(__uuidof(EBASDLLLib::EnumEjerforhold));
		else
			m_EnumEjerforhold->Reset();

		EBASDLLLib::IEjerforholdPtr pEjerforhold = NULL;
		pEjerforhold = m_EnumEjerforhold->findEjerforholdGuid(m_curGruppe->Ejerforhold);
		if (NULL != pEjerforhold) {
			EBASDLLLib::IAdressePtr pAdresse = NULL;
			pAdresse = pEjerforhold->Adresse;
			if (NULL != pAdresse) {
				CString t = (char*)pAdresse->Attention;

				int pos = m_ejerforhold.FindString(-1, t);
				m_ejerforhold.SetCurSel(pos);
				
				pAdresse = NULL;
				pEjerforhold = NULL;
			} 
		}

		m_fag.ResetContent();

		IUnknown * pUnk = NULL; ULONG fetched = 0;
		EBASDLLLib::IEnumFagPtr pEnumFag;
		pEnumFag.CreateInstance(__uuidof(EBASDLLLib::EnumFag));
		pEnumFag->findFagGruppe(m_curGruppe);
		pEnumFag->Next(&pUnk, &fetched);
		while (NULL != pUnk) {
			EBASDLLLib::IFagPtr pFag = NULL;
			pUnk->QueryInterface(__uuidof(EBASDLLLib::IFag), (void**)&pFag);
			pUnk = NULL;

			m_fag.AddString( CString((char*)pFag->Navn) );

			pEnumFag->Next(&pUnk, &fetched);
		}

	} catch (...) {
		
	}

	UpdateData(FALSE);	
}

void CGruppeFagForm::OnButtonGrpoversigtFjernFag() 
{
	UpdateData();

	try {
		int sel = m_fag.GetCurSel();

		CString s;
		m_fag.GetText(sel, s);

		EBASDLLLib::IFagPtr pFag = NULL;
		IUnknown * pUnk = NULL; ULONG fetched = 0;
		EBASDLLLib::IEnumFagPtr pEnumFag;
		pEnumFag.CreateInstance(__uuidof(EBASDLLLib::EnumFag));
		pFag = pEnumFag->findFagNavn(bstr_t(s));
		if (NULL != pFag) {
			m_curGruppe->FjernFag(pFag);
			pFag = NULL;

			m_fag.DeleteString(sel);
		}
	} catch (...) {

	}
	
	UpdateData(FALSE);	
}
